using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;  // Unity事件系统
using UnityEngine.EventSystems;  // UI事件系统
using UnityEngine.UI;  // UI组件
using TMPro;

namespace Manaddiction.UI
{
    /// <summary>
    /// 卡组构建器中的一行（可以包含卡片或卡组标题）
    /// One line in the deckbuilder (can contain a card or a deck title)
    /// </summary>
    public class DeckCardLine : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
    {
        // UI组件引用
        public Image image;          // 卡片图像
        public TextMeshProUGUI title;           // 标题文本
        public TextMeshProUGUI value;           // 数量/数值文本

        // 事件回调
        public UnityAction<DeckCardLine> onClick;        // 左键点击事件
        public UnityAction<DeckCardLine> onClickRight;   // 右键点击事件
        public UnityAction<DeckCardLine> onClickDelete;  // 删除按钮点击事件

        // 数据存储
        private CardData card;       // 卡片数据
        //private DeckData deck;       // 游戏自带预设卡组数据
        private UserDeckData udeck;  // 用户卡组数据
        
        // 状态变量
        private bool hidden = false; // 是否隐藏
        private bool hover = false;  // 鼠标是否悬停

        // 初始化
        void Awake()
        {
            
        }

        // 每帧更新
        void Update()
        {
            
        }

        /// <summary>
        /// 设置行为卡片行
        /// </summary>
        public void SetLine(CardData card, int quantity)
        {
            this.card = card;
            //this.deck = null;
            this.udeck = null;
            hidden = false;

            // 设置UI显示
            if (title != null)
            {
                title.text = card.card_name;  // 卡片标题
                title.color = Color.black;
            }
            if (value != null)
                value.text = quantity.ToString();  // 显示数量
            if (value != null)
                value.enabled = quantity > 0;  // 数量大于0时显示

            // 设置图片和材质
            if (image != null)
            {
                image.sprite = card.card_image;  // 获取完整卡图
                image.enabled = true;
            }

            gameObject.SetActive(true);
        }

        /// <summary>
        /// 设置行为普通文本行
        /// </summary>
        public void SetLine(string title)
        {
            this.card = null;
            this.udeck = null;
            hidden = false;

            if (this.title != null)
                this.title.text = title;
            if (this.title != null)
                this.title.color = Color.white;

            if (this.value != null)
                this.value.enabled = false;

            gameObject.SetActive(true);
        }

        /// <summary>
        /// 隐藏该行
        /// </summary>
        public void Hide()
        {
            this.card = null;
            this.udeck = null;
            hidden = true;
            hover = false;

            // 清空所有UI显示
            if (title != null)
                title.text = "";
            if (this.title != null)
                this.title.color = Color.white;
            if (value != null)
                value.text = "";
            if (value != null)
                value.enabled = true;
            if (image != null)
                image.enabled = false;

            gameObject.SetActive(false);
        }

        // ========== 获取方法 ==========

        public CardData GetCard()
        {
            return card;
        }

        public UserDeckData GetUserDeck()
        {
            return udeck;
        }

        public bool IsHidden()
        {
            return hidden;
        }

        // ========== 事件处理 ==========

        /// <summary>
        /// 鼠标点击事件处理
        /// </summary>
        public void OnPointerClick(PointerEventData eventData)
        {
            if (hidden)
                return;

            if (eventData.button == PointerEventData.InputButton.Left)
            {
                onClick?.Invoke(this);  // 触发左键点击事件
                //AudioTool.Get().PlaySFX("ui", click_audio);  // 播放点击音效
            }

            if (eventData.button == PointerEventData.InputButton.Right)
            {
                onClickRight?.Invoke(this);  // 触发右键点击事件
                //AudioTool.Get().PlaySFX("ui", click_audio);
            }
        }

        /// <summary>
        /// 删除按钮点击事件
        /// </summary>
        public void OnClickDelete()
        {
            onClickDelete?.Invoke(this);
            //AudioTool.Get().PlaySFX("ui", click_audio);
        }

        /// <summary>
        /// 鼠标进入事件
        /// </summary>
        public void OnPointerEnter(PointerEventData eventData)
        {
            hover = true;
        }

        /// <summary>
        /// 鼠标离开事件
        /// </summary>
        public void OnPointerExit(PointerEventData eventData)
        {
            hover = false;
        }
    }
}
